package router

import "github.com/gorilla/websocket"

// 返回普通错误
// easyjson:json
type ErrorJson struct {
	Msg  string `json:"msg"`
	Code int    `json:"code"`
	Time int64  `json:"time"`
}

// 返回成功普通消息
// easyjson:json
type SuccJson struct {
	Data string `json:"data"`
	Msg  string `json:"msg"`
	Time int64  `json:"time"`
}

// easyjson:json
type MSG struct {
	UUID     string `json:"uuid"`
	Room     string `json:"room"`
	Count    int    `json:"count"`
	UName    string `json:"u_name"`
	Body     string `json:"body"`
	Type     int    `json:"type"`      // 聊天类型
	BodyType int    `json:"body_type"` // 消息类型
}

// easyjson:json
type Hub struct {
	broadcast     chan []byte
	register      chan *Client
	unregister    chan *Client
	broadcastRoom chan *Room
	singleConn    chan *Single
}

// easyjson:json
type Room struct {
	Name    string `json:"name"`
	Count   int    `json:"count"`
	Message []byte `json:"message"`
}

// easyjson:json
type Single struct {
	To  string `json:"to"`
	Msg *MSG   `json:"msg"`
}

// easyjson:json
type SingleGetData struct {
	To   string `json:"to"`
	Body string `json:"body"`
}
type Client struct {
	hub  *Hub
	room *Room
	conn *websocket.Conn
	send chan []byte
	uuid string
}

// 以下是 user
// easyjson:json
type ImCreateUser struct {
	Name  string `json:"name"`
	UUID  string `json:"uuid"`
	Appid string `json:"appid"`
	Time  int64  `json:"time"`
}

// 创建群组
// easyjson:json
type ImCreateGroup struct {
	Id           int    `json:"id"`
	Gid          string `json:"gid"`
	Name         string `json:"name"`
	CreateUser   string `json:"create_user"`
	CreateUserId string `json:"create_user_id"`
	Status       int8   `json:"status"`
	CreateTime   int    `json:"create_time"`
}

// 申请app
// easyjson:json
type ImCreateApp struct {
	Id         int    `json:"id"`
	Appid      string `json:"appid"`
	Secret     string `json:"secret"`
	Account    string `json:"account"`
	CreateTime int64  `json:"create_time"`
}

// TODO 以下是账户
// easyjson:json
type ImAccount struct {
	Id          string `json:"id"`
	Account     string `json:"account"`
	Password    string `json:"password"`
	Create_time int64  `json:"create_time"`
}

// join group upload failed
// easyjson:json
type ImJoinGroup struct {
	GroupId string `json:"group_id"`
	UUID    string `json:"uuid"`
}

//easyjson:json
type NosendMessage struct {
	Id         int    `json:"id"`
	UUID       string `json:"uuid"`
	Msg        string `json:"msg"`
	CreateTime int64  `json:"create_time"`
}
